﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace AL100.Samples.CSharp4
{
    class Program
    {
        

        static void Main(string[] args)
        {
            Test_AnonymousClasses();
        }

        public static void Test_ImplicitlyTypedVariables()
        {
            Person p = new Person();
            Object q = new Person();
            
            // Utilisation d'une variable implicitement typée.
            var r = new Person();

            // la ligne suivante ne fonctionne pas car une variable 
            // implicitement typée doit être immédiatement suivie d'une affectation.
            //var y;
        }

        public static void Test_AnonymousClasses()
        {
            var anonymousClass = new
            {
                CurrentTime = DateTime.Now,
                CurrentYear = DateTime.Now.Year
            };

            Console.WriteLine(anonymousClass.CurrentTime);

        }

        public static void Test_AnonymousMethods()
        {
            var p = new Person();
           
            // On veut ajouter du traitement à l'event TheEvent..
            //p.TheEvent += new EventHandler<EventArgs>(p_TheEvent);
            //p.TheEvent += p_TheEvent;
            p.TheEvent += delegate(object sender, EventArgs e ) 
            {
                Console.WriteLine(sender.ToString());
            };
        }

        static void p_TheEvent(object sender, EventArgs e)
        {
            throw new NotImplementedException();
        }

        public static void Test_ExtensionMethods()
        {
            var s = "ABCDsdf<sdfqsdf<sdfsdf";

            Console.WriteLine(s.Left(3));
            // Equivalent sans la syntaxe d'extension..
            Console.WriteLine(ExtensionOfString.Left(s, 3));
        }

    }
}
